home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / net / URI.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  17.8 KB  |  1,490 lines

  1. package java.net;
  2.  
  3. import java.io.IOException;
  4. import java.io.InvalidObjectException;
  5. import java.io.ObjectInputStream;
  6. import java.io.ObjectOutputStream;
  7. import java.io.Serializable;
  8. import java.nio.ByteBuffer;
  9. import java.nio.CharBuffer;
  10. import java.nio.charset.CharacterCodingException;
  11. import java.nio.charset.CharsetDecoder;
  12. import java.nio.charset.CoderResult;
  13. import java.nio.charset.CodingErrorAction;
  14. import java.text.Normalizer;
  15. import java.text.Normalizer.Form;
  16. import sun.nio.cs.ThreadLocalCoders;
  17.  
  18. public final class URI implements Comparable<URI>, Serializable {
  19.    static final long serialVersionUID = -6052424284110960213L;
  20.    private transient String scheme;
  21.    private transient String fragment;
  22.    private transient String authority;
  23.    private transient String userInfo;
  24.    private transient String host;
  25.    private transient int port;
  26.    private transient String path;
  27.    private transient String query;
  28.    private transient volatile String schemeSpecificPart;
  29.    private transient volatile int hash;
  30.    private transient volatile String decodedUserInfo;
  31.    private transient volatile String decodedAuthority;
  32.    private transient volatile String decodedPath;
  33.    private transient volatile String decodedQuery;
  34.    private transient volatile String decodedFragment;
  35.    private transient volatile String decodedSchemeSpecificPart;
  36.    private volatile String string;
  37.    private static final long L_DIGIT = lowMask('0', '9');
  38.    private static final long H_DIGIT = 0L;
  39.    private static final long L_UPALPHA = 0L;
  40.    private static final long H_UPALPHA = highMask('A', 'Z');
  41.    private static final long L_LOWALPHA = 0L;
  42.    private static final long H_LOWALPHA = highMask('a', 'z');
  43.    private static final long L_ALPHA = 0L;
  44.    private static final long H_ALPHA;
  45.    private static final long L_ALPHANUM;
  46.    private static final long H_ALPHANUM;
  47.    private static final long L_HEX;
  48.    private static final long H_HEX;
  49.    private static final long L_MARK;
  50.    private static final long H_MARK;
  51.    private static final long L_UNRESERVED;
  52.    private static final long H_UNRESERVED;
  53.    private static final long L_RESERVED;
  54.    private static final long H_RESERVED;
  55.    private static final long L_ESCAPED = 1L;
  56.    private static final long H_ESCAPED = 0L;
  57.    private static final long L_URIC;
  58.    private static final long H_URIC;
  59.    private static final long L_PCHAR;
  60.    private static final long H_PCHAR;
  61.    private static final long L_PATH;
  62.    private static final long H_PATH;
  63.    private static final long L_DASH;
  64.    private static final long H_DASH;
  65.    private static final long L_DOT;
  66.    private static final long H_DOT;
  67.    private static final long L_USERINFO;
  68.    private static final long H_USERINFO;
  69.    private static final long L_REG_NAME;
  70.    private static final long H_REG_NAME;
  71.    private static final long L_SERVER;
  72.    private static final long H_SERVER;
  73.    private static final long L_SERVER_PERCENT;
  74.    private static final long H_SERVER_PERCENT;
  75.    private static final long L_LEFT_BRACKET;
  76.    private static final long H_LEFT_BRACKET;
  77.    private static final long L_SCHEME;
  78.    private static final long H_SCHEME;
  79.    private static final long L_URIC_NO_SLASH;
  80.    private static final long H_URIC_NO_SLASH;
  81.    private static final char[] hexDigits;
  82.  
  83.    private URI() {
  84.       this.port = -1;
  85.       this.decodedUserInfo = null;
  86.       this.decodedAuthority = null;
  87.       this.decodedPath = null;
  88.       this.decodedQuery = null;
  89.       this.decodedFragment = null;
  90.       this.decodedSchemeSpecificPart = null;
  91.    }
  92.  
  93.    public URI(String var1) throws URISyntaxException {
  94.       this.port = -1;
  95.       this.decodedUserInfo = null;
  96.       this.decodedAuthority = null;
  97.       this.decodedPath = null;
  98.       this.decodedQuery = null;
  99.       this.decodedFragment = null;
  100.       this.decodedSchemeSpecificPart = null;
  101.       (new Parser(this, var1)).parse(false);
  102.    }
  103.  
  104.    public URI(String var1, String var2, String var3, int var4, String var5, String var6, String var7) throws URISyntaxException {
  105.       this.port = -1;
  106.       this.decodedUserInfo = null;
  107.       this.decodedAuthority = null;
  108.       this.decodedPath = null;
  109.       this.decodedQuery = null;
  110.       this.decodedFragment = null;
  111.       this.decodedSchemeSpecificPart = null;
  112.       String var8 = this.toString(var1, (String)null, (String)null, var2, var3, var4, var5, var6, var7);
  113.       checkPath(var8, var1, var5);
  114.       (new Parser(this, var8)).parse(true);
  115.    }
  116.  
  117.    public URI(String var1, String var2, String var3, String var4, String var5) throws URISyntaxException {
  118.       this.port = -1;
  119.       this.decodedUserInfo = null;
  120.       this.decodedAuthority = null;
  121.       this.decodedPath = null;
  122.       this.decodedQuery = null;
  123.       this.decodedFragment = null;
  124.       this.decodedSchemeSpecificPart = null;
  125.       String var6 = this.toString(var1, (String)null, var2, (String)null, (String)null, -1, var3, var4, var5);
  126.       checkPath(var6, var1, var3);
  127.       (new Parser(this, var6)).parse(false);
  128.    }
  129.  
  130.    public URI(String var1, String var2, String var3, String var4) throws URISyntaxException {
  131.       this(var1, (String)null, var2, -1, var3, (String)null, var4);
  132.    }
  133.  
  134.    public URI(String var1, String var2, String var3) throws URISyntaxException {
  135.       this.port = -1;
  136.       this.decodedUserInfo = null;
  137.       this.decodedAuthority = null;
  138.       this.decodedPath = null;
  139.       this.decodedQuery = null;
  140.       this.decodedFragment = null;
  141.       this.decodedSchemeSpecificPart = null;
  142.       (new Parser(this, this.toString(var1, var2, (String)null, (String)null, (String)null, -1, (String)null, (String)null, var3))).parse(false);
  143.    }
  144.  
  145.    public static URI create(String var0) {
  146.       try {
  147.          return new URI(var0);
  148.       } catch (URISyntaxException var3) {
  149.          IllegalArgumentException var2 = new IllegalArgumentException();
  150.          var2.initCause(var3);
  151.          throw var2;
  152.       }
  153.    }
  154.  
  155.    public URI parseServerAuthority() throws URISyntaxException {
  156.       if (this.host == null && this.authority != null) {
  157.          this.defineString();
  158.          (new Parser(this, this.string)).parse(true);
  159.          return this;
  160.       } else {
  161.          return this;
  162.       }
  163.    }
  164.  
  165.    public URI normalize() {
  166.       return normalize(this);
  167.    }
  168.  
  169.    public URI resolve(URI var1) {
  170.       return resolve(this, var1);
  171.    }
  172.  
  173.    public URI resolve(String var1) {
  174.       return this.resolve(create(var1));
  175.    }
  176.  
  177.    public URI relativize(URI var1) {
  178.       return relativize(this, var1);
  179.    }
  180.  
  181.    public URL toURL() throws MalformedURLException {
  182.       if (!this.isAbsolute()) {
  183.          throw new IllegalArgumentException("URI is not absolute");
  184.       } else {
  185.          return new URL(this.toString());
  186.       }
  187.    }
  188.  
  189.    public String getScheme() {
  190.       return this.scheme;
  191.    }
  192.  
  193.    public boolean isAbsolute() {
  194.       return this.scheme != null;
  195.    }
  196.  
  197.    public boolean isOpaque() {
  198.       return this.path == null;
  199.    }
  200.  
  201.    public String getRawSchemeSpecificPart() {
  202.       this.defineSchemeSpecificPart();
  203.       return this.schemeSpecificPart;
  204.    }
  205.  
  206.    public String getSchemeSpecificPart() {
  207.       if (this.decodedSchemeSpecificPart == null) {
  208.          this.decodedSchemeSpecificPart = decode(this.getRawSchemeSpecificPart());
  209.       }
  210.  
  211.       return this.decodedSchemeSpecificPart;
  212.    }
  213.  
  214.    public String getRawAuthority() {
  215.       return this.authority;
  216.    }
  217.  
  218.    public String getAuthority() {
  219.       if (this.decodedAuthority == null) {
  220.          this.decodedAuthority = decode(this.authority);
  221.       }
  222.  
  223.       return this.decodedAuthority;
  224.    }
  225.  
  226.    public String getRawUserInfo() {
  227.       return this.userInfo;
  228.    }
  229.  
  230.    public String getUserInfo() {
  231.       if (this.decodedUserInfo == null && this.userInfo != null) {
  232.          this.decodedUserInfo = decode(this.userInfo);
  233.       }
  234.  
  235.       return this.decodedUserInfo;
  236.    }
  237.  
  238.    public String getHost() {
  239.       return this.host;
  240.    }
  241.  
  242.    public int getPort() {
  243.       return this.port;
  244.    }
  245.  
  246.    public String getRawPath() {
  247.       return this.path;
  248.    }
  249.  
  250.    public String getPath() {
  251.       if (this.decodedPath == null && this.path != null) {
  252.          this.decodedPath = decode(this.path);
  253.       }
  254.  
  255.       return this.decodedPath;
  256.    }
  257.  
  258.    public String getRawQuery() {
  259.       return this.query;
  260.    }
  261.  
  262.    public String getQuery() {
  263.       if (this.decodedQuery == null && this.query != null) {
  264.          this.decodedQuery = decode(this.query);
  265.       }
  266.  
  267.       return this.decodedQuery;
  268.    }
  269.  
  270.    public String getRawFragment() {
  271.       return this.fragment;
  272.    }
  273.  
  274.    public String getFragment() {
  275.       if (this.decodedFragment == null && this.fragment != null) {
  276.          this.decodedFragment = decode(this.fragment);
  277.       }
  278.  
  279.       return this.decodedFragment;
  280.    }
  281.  
  282.    public boolean equals(Object var1) {
  283.       if (var1 == this) {
  284.          return true;
  285.       } else if (!(var1 instanceof URI)) {
  286.          return false;
  287.       } else {
  288.          URI var2 = (URI)var1;
  289.          if (this.isOpaque() != var2.isOpaque()) {
  290.             return false;
  291.          } else if (!equalIgnoringCase(this.scheme, var2.scheme)) {
  292.             return false;
  293.          } else if (!equal(this.fragment, var2.fragment)) {
  294.             return false;
  295.          } else if (this.isOpaque()) {
  296.             return equal(this.schemeSpecificPart, var2.schemeSpecificPart);
  297.          } else if (!equal(this.path, var2.path)) {
  298.             return false;
  299.          } else if (!equal(this.query, var2.query)) {
  300.             return false;
  301.          } else if (this.authority == var2.authority) {
  302.             return true;
  303.          } else {
  304.             if (this.host != null) {
  305.                if (!equal(this.userInfo, var2.userInfo)) {
  306.                   return false;
  307.                }
  308.  
  309.                if (!equalIgnoringCase(this.host, var2.host)) {
  310.                   return false;
  311.                }
  312.  
  313.                if (this.port != var2.port) {
  314.                   return false;
  315.                }
  316.             } else if (this.authority != null) {
  317.                if (!equal(this.authority, var2.authority)) {
  318.                   return false;
  319.                }
  320.             } else if (this.authority != var2.authority) {
  321.                return false;
  322.             }
  323.  
  324.             return true;
  325.          }
  326.       }
  327.    }
  328.  
  329.    public int hashCode() {
  330.       if (this.hash != 0) {
  331.          return this.hash;
  332.       } else {
  333.          int var1 = hashIgnoringCase(0, this.scheme);
  334.          var1 = hash(var1, this.fragment);
  335.          if (this.isOpaque()) {
  336.             var1 = hash(var1, this.schemeSpecificPart);
  337.          } else {
  338.             var1 = hash(var1, this.path);
  339.             var1 = hash(var1, this.query);
  340.             if (this.host != null) {
  341.                var1 = hash(var1, this.userInfo);
  342.                var1 = hashIgnoringCase(var1, this.host);
  343.                var1 += 1949 * this.port;
  344.             } else {
  345.                var1 = hash(var1, this.authority);
  346.             }
  347.          }
  348.  
  349.          this.hash = var1;
  350.          return var1;
  351.       }
  352.    }
  353.  
  354.    public int compareTo(URI var1) {
  355.       int var2;
  356.       if ((var2 = compareIgnoringCase(this.scheme, var1.scheme)) != 0) {
  357.          return var2;
  358.       } else if (this.isOpaque()) {
  359.          if (var1.isOpaque()) {
  360.             return (var2 = compare(this.schemeSpecificPart, var1.schemeSpecificPart)) != 0 ? var2 : compare(this.fragment, var1.fragment);
  361.          } else {
  362.             return 1;
  363.          }
  364.       } else if (var1.isOpaque()) {
  365.          return -1;
  366.       } else {
  367.          if (this.host != null && var1.host != null) {
  368.             if ((var2 = compare(this.userInfo, var1.userInfo)) != 0) {
  369.                return var2;
  370.             }
  371.  
  372.             if ((var2 = compareIgnoringCase(this.host, var1.host)) != 0) {
  373.                return var2;
  374.             }
  375.  
  376.             if ((var2 = this.port - var1.port) != 0) {
  377.                return var2;
  378.             }
  379.          } else if ((var2 = compare(this.authority, var1.authority)) != 0) {
  380.             return var2;
  381.          }
  382.  
  383.          if ((var2 = compare(this.path, var1.path)) != 0) {
  384.             return var2;
  385.          } else {
  386.             return (var2 = compare(this.query, var1.query)) != 0 ? var2 : compare(this.fragment, var1.fragment);
  387.          }
  388.       }
  389.    }
  390.  
  391.    public String toString() {
  392.       this.defineString();
  393.       return this.string;
  394.    }
  395.  
  396.    public String toASCIIString() {
  397.       this.defineString();
  398.       return encode(this.string);
  399.    }
  400.  
  401.    private void writeObject(ObjectOutputStream var1) throws IOException {
  402.       this.defineString();
  403.       var1.defaultWriteObject();
  404.    }
  405.  
  406.    private void readObject(ObjectInputStream var1) throws ClassNotFoundException, IOException {
  407.       this.port = -1;
  408.       var1.defaultReadObject();
  409.  
  410.       try {
  411.          (new Parser(this, this.string)).parse(false);
  412.       } catch (URISyntaxException var4) {
  413.          InvalidObjectException var3 = new InvalidObjectException("Invalid URI");
  414.          ((IOException)var3).initCause(var4);
  415.          throw var3;
  416.       }
  417.    }
  418.  
  419.    private static int toLower(char var0) {
  420.       return var0 >= 'A' && var0 <= 'Z' ? var0 + 32 : var0;
  421.    }
  422.  
  423.    private static boolean equal(String var0, String var1) {
  424.       if (var0 == var1) {
  425.          return true;
  426.       } else if (var0 != null && var1 != null) {
  427.          if (var0.length() != var1.length()) {
  428.             return false;
  429.          } else if (var0.indexOf(37) < 0) {
  430.             return var0.equals(var1);
  431.          } else {
  432.             int var2 = var0.length();
  433.             int var3 = 0;
  434.  
  435.             while(var3 < var2) {
  436.                char var4 = var0.charAt(var3);
  437.                char var5 = var1.charAt(var3);
  438.                if (var4 != '%') {
  439.                   if (var4 != var5) {
  440.                      return false;
  441.                   }
  442.  
  443.                   ++var3;
  444.                } else {
  445.                   ++var3;
  446.                   if (toLower(var0.charAt(var3)) != toLower(var1.charAt(var3))) {
  447.                      return false;
  448.                   }
  449.  
  450.                   ++var3;
  451.                   if (toLower(var0.charAt(var3)) != toLower(var1.charAt(var3))) {
  452.                      return false;
  453.                   }
  454.  
  455.                   ++var3;
  456.                }
  457.             }
  458.  
  459.             return true;
  460.          }
  461.       } else {
  462.          return false;
  463.       }
  464.    }
  465.  
  466.    private static boolean equalIgnoringCase(String var0, String var1) {
  467.       if (var0 == var1) {
  468.          return true;
  469.       } else if (var0 != null && var1 != null) {
  470.          int var2 = var0.length();
  471.          if (var1.length() != var2) {
  472.             return false;
  473.          } else {
  474.             for(int var3 = 0; var3 < var2; ++var3) {
  475.                if (toLower(var0.charAt(var3)) != toLower(var1.charAt(var3))) {
  476.                   return false;
  477.                }
  478.             }
  479.  
  480.             return true;
  481.          }
  482.       } else {
  483.          return false;
  484.       }
  485.    }
  486.  
  487.    private static int hash(int var0, String var1) {
  488.       return var1 == null ? var0 : var0 * 127 + var1.hashCode();
  489.    }
  490.  
  491.    private static int hashIgnoringCase(int var0, String var1) {
  492.       if (var1 == null) {
  493.          return var0;
  494.       } else {
  495.          int var2 = var0;
  496.          int var3 = var1.length();
  497.  
  498.          for(int var4 = 0; var4 < var3; ++var4) {
  499.             var2 = 31 * var2 + toLower(var1.charAt(var4));
  500.          }
  501.  
  502.          return var2;
  503.       }
  504.    }
  505.  
  506.    private static int compare(String var0, String var1) {
  507.       if (var0 == var1) {
  508.          return 0;
  509.       } else if (var0 != null) {
  510.          return var1 != null ? var0.compareTo(var1) : 1;
  511.       } else {
  512.          return -1;
  513.       }
  514.    }
  515.  
  516.    private static int compareIgnoringCase(String var0, String var1) {
  517.       if (var0 == var1) {
  518.          return 0;
  519.       } else if (var0 != null) {
  520.          if (var1 != null) {
  521.             int var2 = var0.length();
  522.             int var3 = var1.length();
  523.             int var4 = var2 < var3 ? var2 : var3;
  524.  
  525.             for(int var5 = 0; var5 < var4; ++var5) {
  526.                int var6 = toLower(var0.charAt(var5)) - toLower(var1.charAt(var5));
  527.                if (var6 != 0) {
  528.                   return var6;
  529.                }
  530.             }
  531.  
  532.             return var2 - var3;
  533.          } else {
  534.             return 1;
  535.          }
  536.       } else {
  537.          return -1;
  538.       }
  539.    }
  540.  
  541.    private static void checkPath(String var0, String var1, String var2) throws URISyntaxException {
  542.       if (var1 != null && var2 != null && var2.length() > 0 && var2.charAt(0) != '/') {
  543.          throw new URISyntaxException(var0, "Relative path in absolute URI");
  544.       }
  545.    }
  546.  
  547.    private void appendAuthority(StringBuffer var1, String var2, String var3, String var4, int var5) {
  548.       if (var4 != null) {
  549.          var1.append("//");
  550.          if (var3 != null) {
  551.             var1.append(quote(var3, L_USERINFO, H_USERINFO));
  552.             var1.append('@');
  553.          }
  554.  
  555.          boolean var6 = var4.indexOf(58) >= 0 && !var4.startsWith("[") && !var4.endsWith("]");
  556.          if (var6) {
  557.             var1.append('[');
  558.          }
  559.  
  560.          var1.append(var4);
  561.          if (var6) {
  562.             var1.append(']');
  563.          }
  564.  
  565.          if (var5 != -1) {
  566.             var1.append(':');
  567.             var1.append(var5);
  568.          }
  569.       } else if (var2 != null) {
  570.          var1.append("//");
  571.          if (var2.startsWith("[")) {
  572.             int var9 = var2.indexOf("]");
  573.             if (var9 != -1 && var2.indexOf(":") != -1) {
  574.                String var7;
  575.                String var8;
  576.                if (var9 == var2.length()) {
  577.                   var8 = var2;
  578.                   var7 = "";
  579.                } else {
  580.                   var8 = var2.substring(0, var9 + 1);
  581.                   var7 = var2.substring(var9 + 1);
  582.                }
  583.  
  584.                var1.append(var8);
  585.                var1.append(quote(var7, L_REG_NAME | L_SERVER, H_REG_NAME | H_SERVER));
  586.             }
  587.          } else {
  588.             var1.append(quote(var2, L_REG_NAME | L_SERVER, H_REG_NAME | H_SERVER));
  589.          }
  590.       }
  591.  
  592.    }
  593.  
  594.    private void appendSchemeSpecificPart(StringBuffer var1, String var2, String var3, String var4, String var5, int var6, String var7, String var8) {
  595.       if (var2 != null) {
  596.          if (var2.startsWith("//[")) {
  597.             int var9 = var2.indexOf("]");
  598.             if (var9 != -1 && var2.indexOf(":") != -1) {
  599.                String var10;
  600.                String var11;
  601.                if (var9 == var2.length()) {
  602.                   var11 = var2;
  603.                   var10 = "";
  604.                } else {
  605.                   var11 = var2.substring(0, var9 + 1);
  606.                   var10 = var2.substring(var9 + 1);
  607.                }
  608.  
  609.                var1.append(var11);
  610.                var1.append(quote(var10, L_URIC, H_URIC));
  611.             }
  612.          } else {
  613.             var1.append(quote(var2, L_URIC, H_URIC));
  614.          }
  615.       } else {
  616.          this.appendAuthority(var1, var3, var4, var5, var6);
  617.          if (var7 != null) {
  618.             var1.append(quote(var7, L_PATH, H_PATH));
  619.          }
  620.  
  621.          if (var8 != null) {
  622.             var1.append('?');
  623.             var1.append(quote(var8, L_URIC, H_URIC));
  624.          }
  625.       }
  626.  
  627.    }
  628.  
  629.    private void appendFragment(StringBuffer var1, String var2) {
  630.       if (var2 != null) {
  631.          var1.append('#');
  632.          var1.append(quote(var2, L_URIC, H_URIC));
  633.       }
  634.  
  635.    }
  636.  
  637.    private String toString(String var1, String var2, String var3, String var4, String var5, int var6, String var7, String var8, String var9) {
  638.       StringBuffer var10 = new StringBuffer();
  639.       if (var1 != null) {
  640.          var10.append(var1);
  641.          var10.append(':');
  642.       }
  643.  
  644.       this.appendSchemeSpecificPart(var10, var2, var3, var4, var5, var6, var7, var8);
  645.       this.appendFragment(var10, var9);
  646.       return var10.toString();
  647.    }
  648.  
  649.    private void defineSchemeSpecificPart() {
  650.       if (this.schemeSpecificPart == null) {
  651.          StringBuffer var1 = new StringBuffer();
  652.          this.appendSchemeSpecificPart(var1, (String)null, this.getAuthority(), this.getUserInfo(), this.host, this.port, this.getPath(), this.getQuery());
  653.          if (var1.length() != 0) {
  654.             this.schemeSpecificPart = var1.toString();
  655.          }
  656.       }
  657.    }
  658.  
  659.    private void defineString() {
  660.       if (this.string == null) {
  661.          StringBuffer var1 = new StringBuffer();
  662.          if (this.scheme != null) {
  663.             var1.append(this.scheme);
  664.             var1.append(':');
  665.          }
  666.  
  667.          if (this.isOpaque()) {
  668.             var1.append(this.schemeSpecificPart);
  669.          } else {
  670.             if (this.host != null) {
  671.                var1.append("//");
  672.                if (this.userInfo != null) {
  673.                   var1.append(this.userInfo);
  674.                   var1.append('@');
  675.                }
  676.  
  677.                boolean var2 = this.host.indexOf(58) >= 0 && !this.host.startsWith("[") && !this.host.endsWith("]");
  678.                if (var2) {
  679.                   var1.append('[');
  680.                }
  681.  
  682.                var1.append(this.host);
  683.                if (var2) {
  684.                   var1.append(']');
  685.                }
  686.  
  687.                if (this.port != -1) {
  688.                   var1.append(':');
  689.                   var1.append(this.port);
  690.                }
  691.             } else if (this.authority != null) {
  692.                var1.append("//");
  693.                var1.append(this.authority);
  694.             }
  695.  
  696.             if (this.path != null) {
  697.                var1.append(this.path);
  698.             }
  699.  
  700.             if (this.query != null) {
  701.                var1.append('?');
  702.                var1.append(this.query);
  703.             }
  704.          }
  705.  
  706.          if (this.fragment != null) {
  707.             var1.append('#');
  708.             var1.append(this.fragment);
  709.          }
  710.  
  711.          this.string = var1.toString();
  712.       }
  713.    }
  714.  
  715.    private static String resolvePath(String var0, String var1, boolean var2) {
  716.       int var3 = var0.lastIndexOf(47);
  717.       int var4 = var1.length();
  718.       String var5 = "";
  719.       if (var4 == 0) {
  720.          if (var3 >= 0) {
  721.             var5 = var0.substring(0, var3 + 1);
  722.          }
  723.       } else {
  724.          StringBuffer var6 = new StringBuffer(var0.length() + var4);
  725.          if (var3 >= 0) {
  726.             var6.append(var0.substring(0, var3 + 1));
  727.          }
  728.  
  729.          var6.append(var1);
  730.          var5 = var6.toString();
  731.       }
  732.  
  733.       String var7 = normalize(var5);
  734.       return var7;
  735.    }
  736.  
  737.    private static URI resolve(URI var0, URI var1) {
  738.       if (!var1.isOpaque() && !var0.isOpaque()) {
  739.          if (var1.scheme == null && var1.authority == null && var1.path.equals("") && var1.fragment != null && var1.query == null) {
  740.             if (var0.fragment != null && var1.fragment.equals(var0.fragment)) {
  741.                return var0;
  742.             } else {
  743.                URI var4 = new URI();
  744.                var4.scheme = var0.scheme;
  745.                var4.authority = var0.authority;
  746.                var4.userInfo = var0.userInfo;
  747.                var4.host = var0.host;
  748.                var4.port = var0.port;
  749.                var4.path = var0.path;
  750.                var4.fragment = var1.fragment;
  751.                var4.query = var0.query;
  752.                return var4;
  753.             }
  754.          } else if (var1.scheme != null) {
  755.             return var1;
  756.          } else {
  757.             URI var2 = new URI();
  758.             var2.scheme = var0.scheme;
  759.             var2.query = var1.query;
  760.             var2.fragment = var1.fragment;
  761.             if (var1.authority == null) {
  762.                var2.authority = var0.authority;
  763.                var2.host = var0.host;
  764.                var2.userInfo = var0.userInfo;
  765.                var2.port = var0.port;
  766.                String var3 = var1.path == null ? "" : var1.path;
  767.                if (var3.length() > 0 && var3.charAt(0) == '/') {
  768.                   var2.path = var1.path;
  769.                } else {
  770.                   var2.path = resolvePath(var0.path, var3, var0.isAbsolute());
  771.                }
  772.             } else {
  773.                var2.authority = var1.authority;
  774.                var2.host = var1.host;
  775.                var2.userInfo = var1.userInfo;
  776.                var2.host = var1.host;
  777.                var2.port = var1.port;
  778.                var2.path = var1.path;
  779.             }
  780.  
  781.             return var2;
  782.          }
  783.       } else {
  784.          return var1;
  785.       }
  786.    }
  787.  
  788.    private static URI normalize(URI var0) {
  789.       if (!var0.isOpaque() && var0.path != null && var0.path.length() != 0) {
  790.          String var1 = normalize(var0.path);
  791.          if (var1 == var0.path) {
  792.             return var0;
  793.          } else {
  794.             URI var2 = new URI();
  795.             var2.scheme = var0.scheme;
  796.             var2.fragment = var0.fragment;
  797.             var2.authority = var0.authority;
  798.             var2.userInfo = var0.userInfo;
  799.             var2.host = var0.host;
  800.             var2.port = var0.port;
  801.             var2.path = var1;
  802.             var2.query = var0.query;
  803.             return var2;
  804.          }
  805.       } else {
  806.          return var0;
  807.       }
  808.    }
  809.  
  810.    private static URI relativize(URI var0, URI var1) {
  811.       if (!var1.isOpaque() && !var0.isOpaque()) {
  812.          if (equalIgnoringCase(var0.scheme, var1.scheme) && equal(var0.authority, var1.authority)) {
  813.             String var2 = normalize(var0.path);
  814.             String var3 = normalize(var1.path);
  815.             if (!var2.equals(var3)) {
  816.                if (!var2.endsWith("/")) {
  817.                   var2 = var2 + "/";
  818.                }
  819.  
  820.                if (!var3.startsWith(var2)) {
  821.                   return var1;
  822.                }
  823.             }
  824.  
  825.             URI var4 = new URI();
  826.             var4.path = var3.substring(var2.length());
  827.             var4.query = var1.query;
  828.             var4.fragment = var1.fragment;
  829.             return var4;
  830.          } else {
  831.             return var1;
  832.          }
  833.       } else {
  834.          return var1;
  835.       }
  836.    }
  837.  
  838.    private static int needsNormalization(String var0) {
  839.       boolean var1 = true;
  840.       int var2 = 0;
  841.       int var3 = var0.length() - 1;
  842.  
  843.       int var4;
  844.       for(var4 = 0; var4 <= var3 && var0.charAt(var4) == '/'; ++var4) {
  845.       }
  846.  
  847.       if (var4 > 1) {
  848.          var1 = false;
  849.       }
  850.  
  851.       while(var4 <= var3) {
  852.          if (var0.charAt(var4) == '.' && (var4 == var3 || var0.charAt(var4 + 1) == '/' || var0.charAt(var4 + 1) == '.' && (var4 + 1 == var3 || var0.charAt(var4 + 2) == '/'))) {
  853.             var1 = false;
  854.          }
  855.  
  856.          ++var2;
  857.  
  858.          while(var4 <= var3) {
  859.             if (var0.charAt(var4++) == '/') {
  860.                while(var4 <= var3 && var0.charAt(var4) == '/') {
  861.                   var1 = false;
  862.                   ++var4;
  863.                }
  864.                break;
  865.             }
  866.          }
  867.       }
  868.  
  869.       return var1 ? -1 : var2;
  870.    }
  871.  
  872.    private static void split(char[] var0, int[] var1) {
  873.       int var2 = var0.length - 1;
  874.       int var3 = 0;
  875.  
  876.       int var4;
  877.       for(var4 = 0; var3 <= var2 && var0[var3] == '/'; ++var3) {
  878.          var0[var3] = 0;
  879.       }
  880.  
  881.       while(var3 <= var2) {
  882.          var1[var4++] = var3++;
  883.  
  884.          while(var3 <= var2) {
  885.             if (var0[var3++] == '/') {
  886.                for(var0[var3 - 1] = 0; var3 <= var2 && var0[var3] == '/'; var0[var3++] = 0) {
  887.                }
  888.                break;
  889.             }
  890.          }
  891.       }
  892.  
  893.       if (var4 != var1.length) {
  894.          throw new InternalError();
  895.       }
  896.    }
  897.  
  898.    private static int join(char[] var0, int[] var1) {
  899.       int var2 = var1.length;
  900.       int var3 = var0.length - 1;
  901.       int var4 = 0;
  902.       if (var0[var4] == 0) {
  903.          var0[var4++] = '/';
  904.       }
  905.  
  906.       for(int var5 = 0; var5 < var2; ++var5) {
  907.          int var6 = var1[var5];
  908.          if (var6 != -1) {
  909.             if (var4 == var6) {
  910.                while(var4 <= var3 && var0[var4] != 0) {
  911.                   ++var4;
  912.                }
  913.  
  914.                if (var4 <= var3) {
  915.                   var0[var4++] = '/';
  916.                }
  917.             } else {
  918.                if (var4 >= var6) {
  919.                   throw new InternalError();
  920.                }
  921.  
  922.                while(var6 <= var3 && var0[var6] != 0) {
  923.                   var0[var4++] = var0[var6++];
  924.                }
  925.  
  926.                if (var6 <= var3) {
  927.                   var0[var4++] = '/';
  928.                }
  929.             }
  930.          }
  931.       }
  932.  
  933.       return var4;
  934.    }
  935.  
  936.    private static void removeDots(char[] var0, int[] var1) {
  937.       int var2 = var1.length;
  938.       int var3 = var0.length - 1;
  939.  
  940.       for(int var4 = 0; var4 < var2; ++var4) {
  941.          byte var5 = 0;
  942.  
  943.          do {
  944.             int var6 = var1[var4];
  945.             if (var0[var6] == '.') {
  946.                if (var6 == var3) {
  947.                   var5 = 1;
  948.                   break;
  949.                }
  950.  
  951.                if (var0[var6 + 1] == 0) {
  952.                   var5 = 1;
  953.                   break;
  954.                }
  955.  
  956.                if (var0[var6 + 1] == '.' && (var6 + 1 == var3 || var0[var6 + 2] == 0)) {
  957.                   var5 = 2;
  958.                   break;
  959.                }
  960.             }
  961.  
  962.             ++var4;
  963.          } while(var4 < var2);
  964.  
  965.          if (var4 > var2 || var5 == 0) {
  966.             break;
  967.          }
  968.  
  969.          if (var5 == 1) {
  970.             var1[var4] = -1;
  971.          } else {
  972.             int var8;
  973.             for(var8 = var4 - 1; var8 >= 0 && var1[var8] == -1; --var8) {
  974.             }
  975.  
  976.             if (var8 >= 0) {
  977.                int var7 = var1[var8];
  978.                if (var0[var7] != '.' || var0[var7 + 1] != '.' || var0[var7 + 2] != 0) {
  979.                   var1[var4] = -1;
  980.                   var1[var8] = -1;
  981.                }
  982.             }
  983.          }
  984.       }
  985.  
  986.    }
  987.  
  988.    private static void maybeAddLeadingDot(char[] var0, int[] var1) {
  989.       if (var0[0] != 0) {
  990.          int var2 = var1.length;
  991.  
  992.          int var3;
  993.          for(var3 = 0; var3 < var2 && var1[var3] < 0; ++var3) {
  994.          }
  995.  
  996.          if (var3 < var2 && var3 != 0) {
  997.             int var4;
  998.             for(var4 = var1[var3]; var4 < var0.length && var0[var4] != ':' && var0[var4] != 0; ++var4) {
  999.             }
  1000.  
  1001.             if (var4 < var0.length && var0[var4] != 0) {
  1002.                var0[0] = '.';
  1003.                var0[1] = 0;
  1004.                var1[0] = 0;
  1005.             }
  1006.          }
  1007.       }
  1008.    }
  1009.  
  1010.    private static String normalize(String var0) {
  1011.       int var1 = needsNormalization(var0);
  1012.       if (var1 < 0) {
  1013.          return var0;
  1014.       } else {
  1015.          char[] var2 = var0.toCharArray();
  1016.          int[] var3 = new int[var1];
  1017.          split(var2, var3);
  1018.          removeDots(var2, var3);
  1019.          maybeAddLeadingDot(var2, var3);
  1020.          String var4 = new String(var2, 0, join(var2, var3));
  1021.          return var4.equals(var0) ? var0 : var4;
  1022.       }
  1023.    }
  1024.  
  1025.    private static long lowMask(String var0) {
  1026.       int var1 = var0.length();
  1027.       long var2 = 0L;
  1028.  
  1029.       for(int var4 = 0; var4 < var1; ++var4) {
  1030.          char var5 = var0.charAt(var4);
  1031.          if (var5 < '@') {
  1032.             var2 |= 1L << var5;
  1033.          }
  1034.       }
  1035.  
  1036.       return var2;
  1037.    }
  1038.  
  1039.    private static long highMask(String var0) {
  1040.       int var1 = var0.length();
  1041.       long var2 = 0L;
  1042.  
  1043.       for(int var4 = 0; var4 < var1; ++var4) {
  1044.          char var5 = var0.charAt(var4);
  1045.          if (var5 >= '@' && var5 < 128) {
  1046.             var2 |= 1L << var5 - 64;
  1047.          }
  1048.       }
  1049.  
  1050.       return var2;
  1051.    }
  1052.  
  1053.    private static long lowMask(char var0, char var1) {
  1054.       long var2 = 0L;
  1055.       int var4 = Math.max(Math.min(var0, 63), 0);
  1056.       int var5 = Math.max(Math.min(var1, 63), 0);
  1057.  
  1058.       for(int var6 = var4; var6 <= var5; ++var6) {
  1059.          var2 |= 1L << var6;
  1060.       }
  1061.  
  1062.       return var2;
  1063.    }
  1064.  
  1065.    private static long highMask(char var0, char var1) {
  1066.       long var2 = 0L;
  1067.       int var4 = Math.max(Math.min(var0, 127), 64) - 64;
  1068.       int var5 = Math.max(Math.min(var1, 127), 64) - 64;
  1069.  
  1070.       for(int var6 = var4; var6 <= var5; ++var6) {
  1071.          var2 |= 1L << var6;
  1072.       }
  1073.  
  1074.       return var2;
  1075.    }
  1076.  
  1077.    private static boolean match(char var0, long var1, long var3) {
  1078.       if (var0 < '@') {
  1079.          return (1L << var0 & var1) != 0L;
  1080.       } else if (var0 < 128) {
  1081.          return (1L << var0 - 64 & var3) != 0L;
  1082.       } else {
  1083.          return false;
  1084.       }
  1085.    }
  1086.  
  1087.    private static void appendEscape(StringBuffer var0, byte var1) {
  1088.       var0.append('%');
  1089.       var0.append(hexDigits[var1 >> 4 & 15]);
  1090.       var0.append(hexDigits[var1 >> 0 & 15]);
  1091.    }
  1092.  
  1093.    private static void appendEncoded(StringBuffer var0, char var1) {
  1094.       ByteBuffer var2 = null;
  1095.  
  1096.       try {
  1097.          var2 = ThreadLocalCoders.encoderFor("UTF-8").encode(CharBuffer.wrap("" + var1));
  1098.       } catch (CharacterCodingException var4) {
  1099.          assert false;
  1100.       }
  1101.  
  1102.       while(var2.hasRemaining()) {
  1103.          int var3 = var2.get() & 255;
  1104.          if (var3 >= 128) {
  1105.             appendEscape(var0, (byte)var3);
  1106.          } else {
  1107.             var0.append((char)var3);
  1108.          }
  1109.       }
  1110.  
  1111.    }
  1112.  
  1113.    private static String quote(String var0, long var1, long var3) {
  1114.       int var5 = var0.length();
  1115.       StringBuffer var6 = null;
  1116.       boolean var7 = (var1 & 1L) != 0L;
  1117.  
  1118.       for(int var8 = 0; var8 < var0.length(); ++var8) {
  1119.          char var9 = var0.charAt(var8);
  1120.          if (var9 < 128) {
  1121.             if (!match(var9, var1, var3)) {
  1122.                if (var6 == null) {
  1123.                   var6 = new StringBuffer();
  1124.                   var6.append(var0.substring(0, var8));
  1125.                }
  1126.  
  1127.                appendEscape(var6, (byte)var9);
  1128.             } else if (var6 != null) {
  1129.                var6.append(var9);
  1130.             }
  1131.          } else if (var7 && (Character.isSpaceChar(var9) || Character.isISOControl(var9))) {
  1132.             if (var6 == null) {
  1133.                var6 = new StringBuffer();
  1134.                var6.append(var0.substring(0, var8));
  1135.             }
  1136.  
  1137.             appendEncoded(var6, var9);
  1138.          } else if (var6 != null) {
  1139.             var6.append(var9);
  1140.          }
  1141.       }
  1142.  
  1143.       return var6 == null ? var0 : var6.toString();
  1144.    }
  1145.  
  1146.    private static String encode(String var0) {
  1147.       int var1 = var0.length();
  1148.       if (var1 == 0) {
  1149.          return var0;
  1150.       } else {
  1151.          int var2 = 0;
  1152.  
  1153.          while(var0.charAt(var2) < 128) {
  1154.             ++var2;
  1155.             if (var2 >= var1) {
  1156.                return var0;
  1157.             }
  1158.          }
  1159.  
  1160.          String var7 = Normalizer.normalize(var0, Form.NFC);
  1161.          ByteBuffer var3 = null;
  1162.  
  1163.          try {
  1164.             var3 = ThreadLocalCoders.encoderFor("UTF-8").encode(CharBuffer.wrap(var7));
  1165.          } catch (CharacterCodingException var6) {
  1166.             assert false;
  1167.          }
  1168.  
  1169.          StringBuffer var4 = new StringBuffer();
  1170.  
  1171.          while(var3.hasRemaining()) {
  1172.             int var5 = var3.get() & 255;
  1173.             if (var5 >= 128) {
  1174.                appendEscape(var4, (byte)var5);
  1175.             } else {
  1176.                var4.append((char)var5);
  1177.             }
  1178.          }
  1179.  
  1180.          return var4.toString();
  1181.       }
  1182.    }
  1183.  
  1184.    private static int decode(char var0) {
  1185.       if (var0 >= '0' && var0 <= '9') {
  1186.          return var0 - 48;
  1187.       } else if (var0 >= 'a' && var0 <= 'f') {
  1188.          return var0 - 97 + 10;
  1189.       } else if (var0 >= 'A' && var0 <= 'F') {
  1190.          return var0 - 65 + 10;
  1191.       } else {
  1192.          assert false;
  1193.  
  1194.          return -1;
  1195.       }
  1196.    }
  1197.  
  1198.    private static byte decode(char var0, char var1) {
  1199.       return (byte)((decode(var0) & 15) << 4 | (decode(var1) & 15) << 0);
  1200.    }
  1201.  
  1202.    private static String decode(String var0) {
  1203.       if (var0 == null) {
  1204.          return var0;
  1205.       } else {
  1206.          int var1 = var0.length();
  1207.          if (var1 == 0) {
  1208.             return var0;
  1209.          } else if (var0.indexOf(37) < 0) {
  1210.             return var0;
  1211.          } else {
  1212.             byte[] var2 = new byte[var1];
  1213.             StringBuffer var3 = new StringBuffer(var1);
  1214.             ByteBuffer var4 = ByteBuffer.allocate(var1);
  1215.             CharBuffer var5 = CharBuffer.allocate(var1);
  1216.             CharsetDecoder var6 = ThreadLocalCoders.decoderFor("UTF-8").onMalformedInput(CodingErrorAction.REPLACE).onUnmappableCharacter(CodingErrorAction.REPLACE);
  1217.             char var7 = var0.charAt(0);
  1218.             boolean var8 = false;
  1219.             int var9 = 0;
  1220.  
  1221.             while(var9 < var1) {
  1222.                assert var7 == var0.charAt(var9);
  1223.  
  1224.                if (var7 == '[') {
  1225.                   var8 = true;
  1226.                } else if (var8 && var7 == ']') {
  1227.                   var8 = false;
  1228.                }
  1229.  
  1230.                if (var7 == '%' && !var8) {
  1231.                   var4.clear();
  1232.  
  1233.                   do {
  1234.                      assert var1 - var9 >= 2;
  1235.  
  1236.                      ++var9;
  1237.                      char var10001 = var0.charAt(var9);
  1238.                      ++var9;
  1239.                      var4.put(decode(var10001, var0.charAt(var9)));
  1240.                      ++var9;
  1241.                      if (var9 >= var1) {
  1242.                         break;
  1243.                      }
  1244.  
  1245.                      var7 = var0.charAt(var9);
  1246.                   } while(var7 == '%');
  1247.  
  1248.                   var4.flip();
  1249.                   var5.clear();
  1250.                   var6.reset();
  1251.                   CoderResult var11 = var6.decode(var4, var5, true);
  1252.  
  1253.                   assert var11.isUnderflow();
  1254.  
  1255.                   var11 = var6.flush(var5);
  1256.  
  1257.                   assert var11.isUnderflow();
  1258.  
  1259.                   var3.append(var5.flip().toString());
  1260.                } else {
  1261.                   var3.append(var7);
  1262.                   ++var9;
  1263.                   if (var9 >= var1) {
  1264.                      break;
  1265.                   }
  1266.  
  1267.                   var7 = var0.charAt(var9);
  1268.                }
  1269.             }
  1270.  
  1271.             return var3.toString();
  1272.          }
  1273.       }
  1274.    }
  1275.  
  1276.    // $FF: synthetic method
  1277.    static String access$002(URI var0, String var1) {
  1278.       return var0.string = var1;
  1279.    }
  1280.  
  1281.    // $FF: synthetic method
  1282.    static long access$100() {
  1283.       return L_HEX;
  1284.    }
  1285.  
  1286.    // $FF: synthetic method
  1287.    static long access$200() {
  1288.       return H_HEX;
  1289.    }
  1290.  
  1291.    // $FF: synthetic method
  1292.    static boolean access$300(char var0, long var1, long var3) {
  1293.       return match(var0, var1, var3);
  1294.    }
  1295.  
  1296.    // $FF: synthetic method
  1297.    static long access$400() {
  1298.       return H_ALPHA;
  1299.    }
  1300.  
  1301.    // $FF: synthetic method
  1302.    static long access$500() {
  1303.       return L_SCHEME;
  1304.    }
  1305.  
  1306.    // $FF: synthetic method
  1307.    static long access$600() {
  1308.       return H_SCHEME;
  1309.    }
  1310.  
  1311.    // $FF: synthetic method
  1312.    static String access$702(URI var0, String var1) {
  1313.       return var0.scheme = var1;
  1314.    }
  1315.  
  1316.    // $FF: synthetic method
  1317.    static long access$800() {
  1318.       return L_URIC;
  1319.    }
  1320.  
  1321.    // $FF: synthetic method
  1322.    static long access$900() {
  1323.       return H_URIC;
  1324.    }
  1325.  
  1326.    // $FF: synthetic method
  1327.    static String access$1002(URI var0, String var1) {
  1328.       return var0.schemeSpecificPart = var1;
  1329.    }
  1330.  
  1331.    // $FF: synthetic method
  1332.    static String access$1102(URI var0, String var1) {
  1333.       return var0.fragment = var1;
  1334.    }
  1335.  
  1336.    // $FF: synthetic method
  1337.    static long access$1200() {
  1338.       return L_PATH;
  1339.    }
  1340.  
  1341.    // $FF: synthetic method
  1342.    static long access$1300() {
  1343.       return H_PATH;
  1344.    }
  1345.  
  1346.    // $FF: synthetic method
  1347.    static String access$1402(URI var0, String var1) {
  1348.       return var0.path = var1;
  1349.    }
  1350.  
  1351.    // $FF: synthetic method
  1352.    static String access$1502(URI var0, String var1) {
  1353.       return var0.query = var1;
  1354.    }
  1355.  
  1356.    // $FF: synthetic method
  1357.    static long access$1600() {
  1358.       return L_SERVER_PERCENT;
  1359.    }
  1360.  
  1361.    // $FF: synthetic method
  1362.    static long access$1700() {
  1363.       return H_SERVER_PERCENT;
  1364.    }
  1365.  
  1366.    // $FF: synthetic method
  1367.    static long access$1800() {
  1368.       return L_SERVER;
  1369.    }
  1370.  
  1371.    // $FF: synthetic method
  1372.    static long access$1900() {
  1373.       return H_SERVER;
  1374.    }
  1375.  
  1376.    // $FF: synthetic method
  1377.    static long access$2000() {
  1378.       return L_REG_NAME;
  1379.    }
  1380.  
  1381.    // $FF: synthetic method
  1382.    static long access$2100() {
  1383.       return H_REG_NAME;
  1384.    }
  1385.  
  1386.    // $FF: synthetic method
  1387.    static String access$2202(URI var0, String var1) {
  1388.       return var0.authority = var1;
  1389.    }
  1390.  
  1391.    // $FF: synthetic method
  1392.    static String access$2302(URI var0, String var1) {
  1393.       return var0.userInfo = var1;
  1394.    }
  1395.  
  1396.    // $FF: synthetic method
  1397.    static String access$2402(URI var0, String var1) {
  1398.       return var0.host = var1;
  1399.    }
  1400.  
  1401.    // $FF: synthetic method
  1402.    static int access$2502(URI var0, int var1) {
  1403.       return var0.port = var1;
  1404.    }
  1405.  
  1406.    // $FF: synthetic method
  1407.    static long access$2600() {
  1408.       return L_USERINFO;
  1409.    }
  1410.  
  1411.    // $FF: synthetic method
  1412.    static long access$2700() {
  1413.       return H_USERINFO;
  1414.    }
  1415.  
  1416.    // $FF: synthetic method
  1417.    static long access$2800() {
  1418.       return L_ALPHANUM;
  1419.    }
  1420.  
  1421.    // $FF: synthetic method
  1422.    static long access$2900() {
  1423.       return H_ALPHANUM;
  1424.    }
  1425.  
  1426.    // $FF: synthetic method
  1427.    static long access$3000() {
  1428.       return L_DIGIT;
  1429.    }
  1430.  
  1431.    // $FF: synthetic method
  1432.    static long access$3100() {
  1433.       return L_DOT;
  1434.    }
  1435.  
  1436.    // $FF: synthetic method
  1437.    static long access$3200() {
  1438.       return H_DOT;
  1439.    }
  1440.  
  1441.    // $FF: synthetic method
  1442.    static long access$3300() {
  1443.       return L_DASH;
  1444.    }
  1445.  
  1446.    // $FF: synthetic method
  1447.    static long access$3400() {
  1448.       return H_DASH;
  1449.    }
  1450.  
  1451.    static {
  1452.       H_ALPHA = H_LOWALPHA | H_UPALPHA;
  1453.       L_ALPHANUM = L_DIGIT | 0L;
  1454.       H_ALPHANUM = 0L | H_ALPHA;
  1455.       L_HEX = L_DIGIT;
  1456.       H_HEX = highMask('A', 'F') | highMask('a', 'f');
  1457.       L_MARK = lowMask("-_.!~*'()");
  1458.       H_MARK = highMask("-_.!~*'()");
  1459.       L_UNRESERVED = L_ALPHANUM | L_MARK;
  1460.       H_UNRESERVED = H_ALPHANUM | H_MARK;
  1461.       L_RESERVED = lowMask(";/?:@&=+$,[]");
  1462.       H_RESERVED = highMask(";/?:@&=+$,[]");
  1463.       L_URIC = L_RESERVED | L_UNRESERVED | 1L;
  1464.       H_URIC = H_RESERVED | H_UNRESERVED | 0L;
  1465.       L_PCHAR = L_UNRESERVED | 1L | lowMask(":@&=+$,");
  1466.       H_PCHAR = H_UNRESERVED | 0L | highMask(":@&=+$,");
  1467.       L_PATH = L_PCHAR | lowMask(";/");
  1468.       H_PATH = H_PCHAR | highMask(";/");
  1469.       L_DASH = lowMask("-");
  1470.       H_DASH = highMask("-");
  1471.       L_DOT = lowMask(".");
  1472.       H_DOT = highMask(".");
  1473.       L_USERINFO = L_UNRESERVED | 1L | lowMask(";:&=+$,");
  1474.       H_USERINFO = H_UNRESERVED | 0L | highMask(";:&=+$,");
  1475.       L_REG_NAME = L_UNRESERVED | 1L | lowMask("$,;:@&=+");
  1476.       H_REG_NAME = H_UNRESERVED | 0L | highMask("$,;:@&=+");
  1477.       L_SERVER = L_USERINFO | L_ALPHANUM | L_DASH | lowMask(".:@[]");
  1478.       H_SERVER = H_USERINFO | H_ALPHANUM | H_DASH | highMask(".:@[]");
  1479.       L_SERVER_PERCENT = L_SERVER | lowMask("%");
  1480.       H_SERVER_PERCENT = H_SERVER | highMask("%");
  1481.       L_LEFT_BRACKET = lowMask("[");
  1482.       H_LEFT_BRACKET = highMask("[");
  1483.       L_SCHEME = 0L | L_DIGIT | lowMask("+-.");
  1484.       H_SCHEME = H_ALPHA | 0L | highMask("+-.");
  1485.       L_URIC_NO_SLASH = L_UNRESERVED | 1L | lowMask(";?:@&=+$,");
  1486.       H_URIC_NO_SLASH = H_UNRESERVED | 0L | highMask(";?:@&=+$,");
  1487.       hexDigits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
  1488.    }
  1489. }
  1490.